home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / usr / include / linux / wanrouter.h < prev    next >
C/C++ Source or Header  |  2005-10-13  |  22KB  |  542 lines

  1. /*****************************************************************************
  2. * wanrouter.h    Definitions for the WAN Multiprotocol Router Module.
  3. *        This module provides API and common services for WAN Link
  4. *        Drivers and is completely hardware-independent.
  5. *
  6. * Author:     Nenad Corbic <ncorbic@sangoma.com>
  7. *        Gideon Hack     
  8. * Additions:    Arnaldo Melo
  9. *
  10. * Copyright:    (c) 1995-2000 Sangoma Technologies Inc.
  11. *
  12. *        This program is free software; you can redistribute it and/or
  13. *        modify it under the terms of the GNU General Public License
  14. *        as published by the Free Software Foundation; either version
  15. *        2 of the License, or (at your option) any later version.
  16. * ============================================================================
  17. * Jul 21, 2000  Nenad Corbic    Added WAN_FT1_READY State
  18. * Feb 24, 2000  Nenad Corbic    Added support for socket based x25api
  19. * Jan 28, 2000  Nenad Corbic    Added support for the ASYNC protocol.
  20. * Oct 04, 1999  Nenad Corbic     Updated for 2.1.0 release
  21. * Jun 02, 1999  Gideon Hack    Added support for the S514 adapter.
  22. * May 23, 1999    Arnaldo Melo    Added local_addr to wanif_conf_t
  23. *                WAN_DISCONNECTING state added
  24. * Jul 20, 1998    David Fong    Added Inverse ARP options to 'wanif_conf_t'
  25. * Jun 12, 1998    David Fong    Added Cisco HDLC support.
  26. * Dec 16, 1997    Jaspreet Singh    Moved 'enable_IPX' and 'network_number' to
  27. *                'wanif_conf_t'
  28. * Dec 05, 1997    Jaspreet Singh    Added 'pap', 'chap' to 'wanif_conf_t'
  29. *                Added 'authenticator' to 'wan_ppp_conf_t'
  30. * Nov 06, 1997    Jaspreet Singh    Changed Router Driver version to 1.1 from 1.0
  31. * Oct 20, 1997    Jaspreet Singh    Added 'cir','bc','be' and 'mc' to 'wanif_conf_t'
  32. *                Added 'enable_IPX' and 'network_number' to 
  33. *                'wan_device_t'.  Also added defines for
  34. *                UDP PACKET TYPE, Interrupt test, critical values
  35. *                for RACE conditions.
  36. * Oct 05, 1997    Jaspreet Singh    Added 'dlci_num' and 'dlci[100]' to 
  37. *                'wan_fr_conf_t' to configure a list of dlci(s)
  38. *                for a NODE 
  39. * Jul 07, 1997    Jaspreet Singh    Added 'ttl' to 'wandev_conf_t' & 'wan_device_t'
  40. * May 29, 1997     Jaspreet Singh    Added 'tx_int_enabled' to 'wan_device_t'
  41. * May 21, 1997    Jaspreet Singh    Added 'udp_port' to 'wan_device_t'
  42. * Apr 25, 1997  Farhan Thawar   Added 'udp_port' to 'wandev_conf_t'
  43. * Jan 16, 1997    Gene Kozin    router_devlist made public
  44. * Jan 02, 1997    Gene Kozin    Initial version (based on wanpipe.h).
  45. *****************************************************************************/
  46.  
  47. #include <linux/spinlock.h>       /* Support for SMP Locking */
  48.  
  49. #ifndef    _ROUTER_H
  50. #define    _ROUTER_H
  51.  
  52. #define    ROUTER_NAME    "wanrouter"    /* in case we ever change it */
  53. #define    ROUTER_VERSION    1        /* version number */
  54. #define    ROUTER_RELEASE    1        /* release (minor version) number */
  55. #define    ROUTER_IOCTL    'W'        /* for IOCTL calls */
  56. #define    ROUTER_MAGIC    0x524D4157L    /* signature: 'WANR' reversed */
  57.  
  58. /* IOCTL codes for /proc/router/<device> entries (up to 255) */
  59. enum router_ioctls
  60. {
  61.     ROUTER_SETUP    = ROUTER_IOCTL<<8,    /* configure device */
  62.     ROUTER_DOWN,                /* shut down device */
  63.     ROUTER_STAT,                /* get device status */
  64.     ROUTER_IFNEW,                /* add interface */
  65.     ROUTER_IFDEL,                /* delete interface */
  66.     ROUTER_IFSTAT,                /* get interface status */
  67.     ROUTER_USER    = (ROUTER_IOCTL<<8)+16,    /* driver-specific calls */
  68.     ROUTER_USER_MAX    = (ROUTER_IOCTL<<8)+31
  69. };
  70.  
  71. /* identifiers for displaying proc file data for dual port adapters */
  72. #define PROC_DATA_PORT_0 0x8000    /* the data is for port 0 */
  73. #define PROC_DATA_PORT_1 0x8001    /* the data is for port 1 */
  74.  
  75. /* NLPID for packet encapsulation (ISO/IEC TR 9577) */
  76. #define    NLPID_IP    0xCC    /* Internet Protocol Datagram */
  77. #define    NLPID_SNAP    0x80    /* IEEE Subnetwork Access Protocol */
  78. #define    NLPID_CLNP    0x81    /* ISO/IEC 8473 */
  79. #define    NLPID_ESIS    0x82    /* ISO/IEC 9542 */
  80. #define    NLPID_ISIS    0x83    /* ISO/IEC ISIS */
  81. #define    NLPID_Q933    0x08    /* CCITT Q.933 */
  82.  
  83. /* Miscellaneous */
  84. #define    WAN_IFNAME_SZ    15    /* max length of the interface name */
  85. #define    WAN_DRVNAME_SZ    15    /* max length of the link driver name */
  86. #define    WAN_ADDRESS_SZ    31    /* max length of the WAN media address */
  87. #define USED_BY_FIELD    8    /* max length of the used by field */
  88.  
  89. /* Defines for UDP PACKET TYPE */
  90. #define UDP_PTPIPE_TYPE     0x01
  91. #define UDP_FPIPE_TYPE        0x02
  92. #define UDP_CPIPE_TYPE        0x03
  93. #define UDP_DRVSTATS_TYPE     0x04
  94. #define UDP_INVALID_TYPE      0x05
  95.  
  96. /* Command return code */
  97. #define CMD_OK        0        /* normal firmware return code */
  98. #define CMD_TIMEOUT    0xFF        /* firmware command timed out */
  99.  
  100. /* UDP Packet Management */
  101. #define UDP_PKT_FRM_STACK    0x00
  102. #define UDP_PKT_FRM_NETWORK    0x01
  103.  
  104. /* Maximum interrupt test counter */
  105. #define MAX_INTR_TEST_COUNTER    100
  106.  
  107. /* Critical Values for RACE conditions*/
  108. #define CRITICAL_IN_ISR        0xA1
  109. #define CRITICAL_INTR_HANDLED    0xB1
  110.  
  111. /****** Data Types **********************************************************/
  112.  
  113. /*----------------------------------------------------------------------------
  114.  * X.25-specific link-level configuration.
  115.  */
  116. typedef struct wan_x25_conf
  117. {
  118.     unsigned lo_pvc;    /* lowest permanent circuit number */
  119.     unsigned hi_pvc;    /* highest permanent circuit number */
  120.     unsigned lo_svc;    /* lowest switched circuit number */
  121.     unsigned hi_svc;    /* highest switched circuit number */
  122.     unsigned hdlc_window;    /* HDLC window size (1..7) */
  123.     unsigned pkt_window;    /* X.25 packet window size (1..7) */
  124.     unsigned t1;        /* HDLC timer T1, sec (1..30) */
  125.     unsigned t2;        /* HDLC timer T2, sec (0..29) */
  126.     unsigned t4;        /* HDLC supervisory frame timer = T4 * T1 */
  127.     unsigned n2;        /* HDLC retransmission limit (1..30) */
  128.     unsigned t10_t20;    /* X.25 RESTART timeout, sec (1..255) */
  129.     unsigned t11_t21;    /* X.25 CALL timeout, sec (1..255) */
  130.     unsigned t12_t22;    /* X.25 RESET timeout, sec (1..255) */
  131.     unsigned t13_t23;    /* X.25 CLEAR timeout, sec (1..255) */
  132.     unsigned t16_t26;    /* X.25 INTERRUPT timeout, sec (1..255) */
  133.     unsigned t28;        /* X.25 REGISTRATION timeout, sec (1..255) */
  134.     unsigned r10_r20;    /* RESTART retransmission limit (0..250) */
  135.     unsigned r12_r22;    /* RESET retransmission limit (0..250) */
  136.     unsigned r13_r23;    /* CLEAR retransmission limit (0..250) */
  137.     unsigned ccitt_compat;    /* compatibility mode: 1988/1984/1980 */
  138.     unsigned x25_conf_opt;   /* User defined x25 config optoins */
  139.     unsigned char LAPB_hdlc_only; /* Run in HDLC only mode */
  140.     unsigned char logging;   /* Control connection logging */  
  141.     unsigned char oob_on_modem; /* Whether to send modem status to the user app */
  142. } wan_x25_conf_t;
  143.  
  144. /*----------------------------------------------------------------------------
  145.  * Frame relay specific link-level configuration.
  146.  */
  147. typedef struct wan_fr_conf
  148. {
  149.     unsigned signalling;    /* local in-channel signalling type */
  150.     unsigned t391;        /* link integrity verification timer */
  151.     unsigned t392;        /* polling verification timer */
  152.     unsigned n391;        /* full status polling cycle counter */
  153.     unsigned n392;        /* error threshold counter */
  154.     unsigned n393;        /* monitored events counter */
  155.     unsigned dlci_num;    /* number of DLCs (access node) */
  156.     unsigned  dlci[100];    /* List of all DLCIs */
  157. } wan_fr_conf_t;
  158.  
  159. /*----------------------------------------------------------------------------
  160.  * PPP-specific link-level configuration.
  161.  */
  162. typedef struct wan_ppp_conf
  163. {
  164.     unsigned restart_tmr;    /* restart timer */
  165.     unsigned auth_rsrt_tmr;    /* authentication timer */
  166.     unsigned auth_wait_tmr;    /* authentication timer */
  167.     unsigned mdm_fail_tmr;    /* modem failure timer */
  168.     unsigned dtr_drop_tmr;    /* DTR drop timer */
  169.     unsigned connect_tmout;    /* connection timeout */
  170.     unsigned conf_retry;    /* max. retry */
  171.     unsigned term_retry;    /* max. retry */
  172.     unsigned fail_retry;    /* max. retry */
  173.     unsigned auth_retry;    /* max. retry */
  174.     unsigned auth_options;    /* authentication opt. */
  175.     unsigned ip_options;    /* IP options */
  176.     char    authenticator;    /* AUTHENTICATOR or not */
  177.     char    ip_mode;    /* Static/Host/Peer */
  178. } wan_ppp_conf_t;
  179.  
  180. /*----------------------------------------------------------------------------
  181.  * CHDLC-specific link-level configuration.
  182.  */
  183. typedef struct wan_chdlc_conf
  184. {
  185.     unsigned char ignore_dcd;    /* Protocol options:        */
  186.     unsigned char ignore_cts;    /*  Ignore these to determine    */
  187.     unsigned char ignore_keepalive;    /*  link status (Yes or No)    */
  188.     unsigned char hdlc_streaming;    /*  hdlc_streaming mode (Y/N) */
  189.     unsigned char receive_only;    /*  no transmit buffering (Y/N) */
  190.     unsigned keepalive_tx_tmr;    /* transmit keepalive timer */
  191.     unsigned keepalive_rx_tmr;    /* receive  keepalive timer */
  192.     unsigned keepalive_err_margin;    /* keepalive_error_tolerance */
  193.     unsigned slarp_timer;        /* SLARP request timer */
  194. } wan_chdlc_conf_t;
  195.  
  196.  
  197. /*----------------------------------------------------------------------------
  198.  * WAN device configuration. Passed to ROUTER_SETUP IOCTL.
  199.  */
  200. typedef struct wandev_conf
  201. {
  202.     unsigned magic;        /* magic number (for verification) */
  203.     unsigned config_id;    /* configuration structure identifier */
  204.                 /****** hardware configuration ******/
  205.     unsigned ioport;    /* adapter I/O port base */
  206.     unsigned long maddr;    /* dual-port memory address */
  207.     unsigned msize;        /* dual-port memory size */
  208.     int irq;        /* interrupt request level */
  209.     int dma;        /* DMA request level */
  210.         char S514_CPU_no[1];    /* S514 PCI adapter CPU number ('A' or 'B') */
  211.         unsigned PCI_slot_no;    /* S514 PCI adapter slot number */
  212.     char auto_pci_cfg;    /* S515 PCI automatic slot detection */
  213.     char comm_port;        /* Communication Port (PRI=0, SEC=1) */ 
  214.     unsigned bps;        /* data transfer rate */
  215.     unsigned mtu;        /* maximum transmit unit size */
  216.         unsigned udp_port;      /* UDP port for management */
  217.     unsigned char ttl;    /* Time To Live for UDP security */
  218.     unsigned char ft1;    /* FT1 Configurator Option */
  219.         char interface;        /* RS-232/V.35, etc. */
  220.     char clocking;        /* external/internal */
  221.     char line_coding;    /* NRZ/NRZI/FM0/FM1, etc. */
  222.     char station;        /* DTE/DCE, primary/secondary, etc. */
  223.     char connection;    /* permanent/switched/on-demand */
  224.     char read_mode;        /* read mode: Polling or interrupt */
  225.     char receive_only;    /* disable tx buffers */
  226.     char tty;        /* Create a fake tty device */
  227.     unsigned tty_major;    /* Major number for wanpipe tty device */
  228.     unsigned tty_minor;     /* Minor number for wanpipe tty device */
  229.     unsigned tty_mode;    /* TTY operation mode SYNC or ASYNC */
  230.     char backup;        /* Backup Mode */
  231.     unsigned hw_opt[4];    /* other hardware options */
  232.     unsigned reserved[4];
  233.                 /****** arbitrary data ***************/
  234.     unsigned data_size;    /* data buffer size */
  235.     void* data;        /* data buffer, e.g. firmware */
  236.     union            /****** protocol-specific ************/
  237.     {
  238.         wan_x25_conf_t x25;    /* X.25 configuration */
  239.         wan_ppp_conf_t ppp;    /* PPP configuration */
  240.         wan_fr_conf_t fr;    /* frame relay configuration */
  241.         wan_chdlc_conf_t chdlc;    /* Cisco HDLC configuration */
  242.     } u;
  243. } wandev_conf_t;
  244.  
  245. /* 'config_id' definitions */
  246. #define    WANCONFIG_X25    101    /* X.25 link */
  247. #define    WANCONFIG_FR    102    /* frame relay link */
  248. #define    WANCONFIG_PPP    103    /* synchronous PPP link */
  249. #define WANCONFIG_CHDLC    104    /* Cisco HDLC Link */
  250. #define WANCONFIG_BSC    105    /* BiSync Streaming */
  251. #define WANCONFIG_HDLC    106    /* HDLC Support */
  252. #define WANCONFIG_MPPP  107    /* Multi Port PPP over RAW CHDLC */
  253.  
  254. /*
  255.  * Configuration options defines.
  256.  */
  257. /* general options */
  258. #define    WANOPT_OFF    0
  259. #define    WANOPT_ON    1
  260. #define    WANOPT_NO    0
  261. #define    WANOPT_YES    1
  262.  
  263. /* intercace options */
  264. #define    WANOPT_RS232    0
  265. #define    WANOPT_V35    1
  266.  
  267. /* data encoding options */
  268. #define    WANOPT_NRZ    0
  269. #define    WANOPT_NRZI    1
  270. #define    WANOPT_FM0    2
  271. #define    WANOPT_FM1    3
  272.  
  273. /* link type options */
  274. #define    WANOPT_POINTTOPOINT    0    /* RTS always active */
  275. #define    WANOPT_MULTIDROP    1    /* RTS is active when transmitting */
  276.  
  277. /* clocking options */
  278. #define    WANOPT_EXTERNAL    0
  279. #define    WANOPT_INTERNAL    1
  280.  
  281. /* station options */
  282. #define    WANOPT_DTE        0
  283. #define    WANOPT_DCE        1
  284. #define    WANOPT_CPE        0
  285. #define    WANOPT_NODE        1
  286. #define    WANOPT_SECONDARY    0
  287. #define    WANOPT_PRIMARY        1
  288.  
  289. /* connection options */
  290. #define    WANOPT_PERMANENT    0    /* DTR always active */
  291. #define    WANOPT_SWITCHED        1    /* use DTR to setup link (dial-up) */
  292. #define    WANOPT_ONDEMAND        2    /* activate DTR only before sending */
  293.  
  294. /* frame relay in-channel signalling */
  295. #define    WANOPT_FR_ANSI        1    /* ANSI T1.617 Annex D */
  296. #define    WANOPT_FR_Q933        2    /* ITU Q.933A */
  297. #define    WANOPT_FR_LMI        3    /* LMI */
  298.  
  299. /* PPP IP Mode Options */
  300. #define    WANOPT_PPP_STATIC    0
  301. #define    WANOPT_PPP_HOST        1
  302. #define    WANOPT_PPP_PEER        2
  303.  
  304. /* ASY Mode Options */
  305. #define WANOPT_ONE         1
  306. #define WANOPT_TWO        2
  307. #define WANOPT_ONE_AND_HALF    3
  308.  
  309. #define WANOPT_NONE    0
  310. #define WANOPT_ODD      1
  311. #define WANOPT_EVEN    2
  312.  
  313. /* CHDLC Protocol Options */
  314. /* DF Commmented out for now.
  315.  
  316. #define WANOPT_CHDLC_NO_DCD        IGNORE_DCD_FOR_LINK_STAT
  317. #define WANOPT_CHDLC_NO_CTS        IGNORE_CTS_FOR_LINK_STAT
  318. #define WANOPT_CHDLC_NO_KEEPALIVE    IGNORE_KPALV_FOR_LINK_STAT
  319. */
  320.  
  321. /* Port options */
  322. #define WANOPT_PRI 0
  323. #define WANOPT_SEC 1
  324. /* read mode */
  325. #define    WANOPT_INTR    0
  326. #define WANOPT_POLL    1
  327.  
  328.  
  329. #define WANOPT_TTY_SYNC  0
  330. #define WANOPT_TTY_ASYNC 1
  331. /*----------------------------------------------------------------------------
  332.  * WAN Link Status Info (for ROUTER_STAT IOCTL).
  333.  */
  334. typedef struct wandev_stat
  335. {
  336.     unsigned state;        /* link state */
  337.     unsigned ndev;        /* number of configured interfaces */
  338.  
  339.     /* link/interface configuration */
  340.     unsigned connection;    /* permanent/switched/on-demand */
  341.     unsigned media_type;    /* Frame relay/PPP/X.25/SDLC, etc. */
  342.     unsigned mtu;        /* max. transmit unit for this device */
  343.  
  344.     /* physical level statistics */
  345.     unsigned modem_status;    /* modem status */
  346.     unsigned rx_frames;    /* received frames count */
  347.     unsigned rx_overruns;    /* receiver overrun error count */
  348.     unsigned rx_crc_err;    /* receive CRC error count */
  349.     unsigned rx_aborts;    /* received aborted frames count */
  350.     unsigned rx_bad_length;    /* unexpetedly long/short frames count */
  351.     unsigned rx_dropped;    /* frames discarded at device level */
  352.     unsigned tx_frames;    /* transmitted frames count */
  353.     unsigned tx_underruns;    /* aborted transmissions (underruns) count */
  354.     unsigned tx_timeouts;    /* transmission timeouts */
  355.     unsigned tx_rejects;    /* other transmit errors */
  356.  
  357.     /* media level statistics */
  358.     unsigned rx_bad_format;    /* frames with invalid format */
  359.     unsigned rx_bad_addr;    /* frames with invalid media address */
  360.     unsigned tx_retries;    /* frames re-transmitted */
  361.     unsigned reserved[16];    /* reserved for future use */
  362. } wandev_stat_t;
  363.  
  364. /* 'state' defines */
  365. enum wan_states
  366. {
  367.     WAN_UNCONFIGURED,    /* link/channel is not configured */
  368.     WAN_DISCONNECTED,    /* link/channel is disconnected */
  369.     WAN_CONNECTING,        /* connection is in progress */
  370.     WAN_CONNECTED,        /* link/channel is operational */
  371.     WAN_LIMIT,        /* for verification only */
  372.     WAN_DUALPORT,        /* for Dual Port cards */
  373.     WAN_DISCONNECTING,
  374.     WAN_FT1_READY        /* FT1 Configurator Ready */
  375. };
  376.  
  377. enum {
  378.     WAN_LOCAL_IP,
  379.     WAN_POINTOPOINT_IP,
  380.     WAN_NETMASK_IP,
  381.     WAN_BROADCAST_IP
  382. };
  383.  
  384. /* 'modem_status' masks */
  385. #define    WAN_MODEM_CTS    0x0001    /* CTS line active */
  386. #define    WAN_MODEM_DCD    0x0002    /* DCD line active */
  387. #define    WAN_MODEM_DTR    0x0010    /* DTR line active */
  388. #define    WAN_MODEM_RTS    0x0020    /* RTS line active */
  389.  
  390. /*----------------------------------------------------------------------------
  391.  * WAN interface (logical channel) configuration (for ROUTER_IFNEW IOCTL).
  392.  */
  393. typedef struct wanif_conf
  394. {
  395.     unsigned magic;            /* magic number */
  396.     unsigned config_id;        /* configuration identifier */
  397.     char name[WAN_IFNAME_SZ+1];    /* interface name, ASCIIZ */
  398.     char addr[WAN_ADDRESS_SZ+1];    /* media address, ASCIIZ */
  399.     char usedby[USED_BY_FIELD];    /* used by API or WANPIPE */
  400.     unsigned idle_timeout;        /* sec, before disconnecting */
  401.     unsigned hold_timeout;        /* sec, before re-connecting */
  402.     unsigned cir;            /* Committed Information Rate fwd,bwd*/
  403.     unsigned bc;            /* Committed Burst Size fwd, bwd */
  404.     unsigned be;            /* Excess Burst Size fwd, bwd */ 
  405.     unsigned char enable_IPX;    /* Enable or Disable IPX */
  406.     unsigned char inarp;        /* Send Inverse ARP requests Y/N */
  407.     unsigned inarp_interval;    /* sec, between InARP requests */
  408.     unsigned long network_number;    /* Network Number for IPX */
  409.     char mc;            /* Multicast on or off */
  410.     char local_addr[WAN_ADDRESS_SZ+1];/* local media address, ASCIIZ */
  411.     unsigned char port;        /* board port */
  412.     unsigned char protocol;        /* prococol used in this channel (TCPOX25 or X25) */
  413.     char pap;            /* PAP enabled or disabled */
  414.     char chap;            /* CHAP enabled or disabled */
  415.     unsigned char userid[511];    /* List of User Id */
  416.     unsigned char passwd[511];    /* List of passwords */
  417.     unsigned char sysname[31];    /* Name of the system */
  418.     unsigned char ignore_dcd;    /* Protocol options: */
  419.     unsigned char ignore_cts;    /*  Ignore these to determine */
  420.     unsigned char ignore_keepalive;    /*  link status (Yes or No) */
  421.     unsigned char hdlc_streaming;    /*  Hdlc streaming mode (Y/N) */
  422.     unsigned keepalive_tx_tmr;    /* transmit keepalive timer */
  423.     unsigned keepalive_rx_tmr;    /* receive  keepalive timer */
  424.     unsigned keepalive_err_margin;    /* keepalive_error_tolerance */
  425.     unsigned slarp_timer;        /* SLARP request timer */
  426.     unsigned char ttl;        /* Time To Live for UDP security */
  427.     char interface;            /* RS-232/V.35, etc. */
  428.     char clocking;            /* external/internal */
  429.     unsigned bps;            /* data transfer rate */
  430.     unsigned mtu;            /* maximum transmit unit size */
  431.     unsigned char if_down;        /* brind down interface when disconnected */
  432.     unsigned char gateway;        /* Is this interface a gateway */
  433.     unsigned char true_if_encoding;    /* Set the dev->type to true board protocol */
  434.  
  435.     unsigned char asy_data_trans;     /* async API options */
  436.         unsigned char rts_hs_for_receive; /* async Protocol options */
  437.         unsigned char xon_xoff_hs_for_receive;
  438.     unsigned char xon_xoff_hs_for_transmit;
  439.     unsigned char dcd_hs_for_transmit;
  440.     unsigned char cts_hs_for_transmit;
  441.     unsigned char async_mode;
  442.     unsigned tx_bits_per_char;
  443.     unsigned rx_bits_per_char;
  444.     unsigned stop_bits;  
  445.     unsigned char parity;
  446.      unsigned break_timer;
  447.         unsigned inter_char_timer;
  448.     unsigned rx_complete_length;
  449.     unsigned xon_char;
  450.     unsigned xoff_char;
  451.     unsigned char receive_only;    /*  no transmit buffering (Y/N) */
  452. } wanif_conf_t;
  453.  
  454. #ifdef    __KERNEL__
  455. /****** Kernel Interface ****************************************************/
  456.  
  457. #include <linux/fs.h>        /* support for device drivers */
  458. #include <linux/proc_fs.h>    /* proc filesystem pragmatics */
  459. #include <linux/netdevice.h>    /* support for network drivers */
  460. /*----------------------------------------------------------------------------
  461.  * WAN device data space.
  462.  */
  463. struct wan_device {
  464.     unsigned magic;            /* magic number */
  465.     char* name;            /* -> WAN device name (ASCIIZ) */
  466.     void* private;            /* -> driver private data */
  467.     unsigned config_id;        /* Configuration ID */
  468.                     /****** hardware configuration ******/
  469.     unsigned ioport;        /* adapter I/O port base #1 */
  470.     char S514_cpu_no[1];        /* PCI CPU Number */
  471.     unsigned char S514_slot_no;    /* PCI Slot Number */
  472.     unsigned long maddr;        /* dual-port memory address */
  473.     unsigned msize;            /* dual-port memory size */
  474.     int irq;            /* interrupt request level */
  475.     int dma;            /* DMA request level */
  476.     unsigned bps;            /* data transfer rate */
  477.     unsigned mtu;            /* max physical transmit unit size */
  478.     unsigned udp_port;              /* UDP port for management */
  479.         unsigned char ttl;        /* Time To Live for UDP security */
  480.     unsigned enable_tx_int;     /* Transmit Interrupt enabled or not */
  481.     char interface;            /* RS-232/V.35, etc. */
  482.     char clocking;            /* external/internal */
  483.     char line_coding;        /* NRZ/NRZI/FM0/FM1, etc. */
  484.     char station;            /* DTE/DCE, primary/secondary, etc. */
  485.     char connection;        /* permanent/switched/on-demand */
  486.     char signalling;        /* Signalling RS232 or V35 */
  487.     char read_mode;            /* read mode: Polling or interrupt */
  488.     char new_if_cnt;                /* Number of interfaces per wanpipe */ 
  489.     char del_if_cnt;        /* Number of times del_if() gets called */
  490.     unsigned char piggyback;        /* Piggibacking a port */
  491.     unsigned hw_opt[4];        /* other hardware options */
  492.                     /****** status and statistics *******/
  493.     char state;            /* device state */
  494.     char api_status;        /* device api status */
  495.     struct net_device_stats stats;     /* interface statistics */
  496.     unsigned reserved[16];        /* reserved for future use */
  497.     unsigned long critical;        /* critical section flag */
  498.     spinlock_t lock;                /* Support for SMP Locking */
  499.  
  500.                     /****** device management methods ***/
  501.     int (*setup) (struct wan_device *wandev, wandev_conf_t *conf);
  502.     int (*shutdown) (struct wan_device *wandev);
  503.     int (*update) (struct wan_device *wandev);
  504.     int (*ioctl) (struct wan_device *wandev, unsigned cmd,
  505.         unsigned long arg);
  506.     int (*new_if)(struct wan_device *wandev, struct net_device *dev,
  507.               wanif_conf_t *conf);
  508.     int (*del_if)(struct wan_device *wandev, struct net_device *dev);
  509.                     /****** maintained by the router ****/
  510.     struct wan_device* next;    /* -> next device */
  511.     struct net_device* dev;        /* list of network interfaces */
  512.     unsigned ndev;            /* number of interfaces */
  513.     struct proc_dir_entry *dent;    /* proc filesystem entry */
  514. };
  515.  
  516. /* Public functions available for device drivers */
  517. extern int register_wan_device(struct wan_device *wandev);
  518. extern int unregister_wan_device(char *name);
  519. unsigned short wanrouter_type_trans(struct sk_buff *skb,
  520.                     struct net_device *dev);
  521. int wanrouter_encapsulate(struct sk_buff *skb, struct net_device *dev,
  522.               unsigned short type);
  523.  
  524. /* Proc interface functions. These must not be called by the drivers! */
  525. extern int wanrouter_proc_init(void);
  526. extern void wanrouter_proc_cleanup(void);
  527. extern int wanrouter_proc_add(struct wan_device *wandev);
  528. extern int wanrouter_proc_delete(struct wan_device *wandev);
  529. extern int wanrouter_ioctl( struct inode *inode, struct file *file, unsigned int cmd, unsigned long arg);
  530.  
  531. extern void lock_adapter_irq(spinlock_t *lock, unsigned long *smp_flags);
  532. extern void unlock_adapter_irq(spinlock_t *lock, unsigned long *smp_flags);
  533.  
  534.  
  535.  
  536. /* Public Data */
  537. /* list of registered devices */
  538. extern struct wan_device *wanrouter_router_devlist;
  539.  
  540. #endif    /* __KERNEL__ */
  541. #endif    /* _ROUTER_H */
  542.